iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

題目說明:給你一個字串,要將其反轉並符合以下規則:
(1)非字母的字元(如-=!等等)必須維持在同位置
(2)是字母的字元必須反轉

Case 1:
Input: s = "ab-cd"
Output: "dc-ba"

Case 2:
Input: s = "a-bC-dEf-ghIj"
Output: "j-Ih-gfE-dCba"

Case 3:
Input: s = "Test1ng-Leet=code-Q!"
Output: "Qedo1ct-eeLg=ntse-T!"

解題思路:是字母的字元要反轉,因此可以用stack進行實作。先建立一個stack把是字母的字元的字元儲存,之後遇到是非字母的字元時就將stack pop出去,有了這個概念程式也就十分好寫了。

附上程式碼以及註解
Java

class Solution {
    public String reverseOnlyLetters(String s) {
        Stack<Character> stack = new Stack();//stack儲存是字母的字元
        for(int i=0;i<s.length();i++){
            if(Character.isAlphabetic(s.charAt(i))){
                stack.push(s.charAt(i));//儲存是字母的字元
            }
        }
        String result="";//儲存結果
        for(int j=0;j<s.length();j++){
            if(!Character.isAlphabetic(s.charAt(j))){
                result+=s.charAt(j);//遇到非字母的字元會其結果維持在將同位置
            }
            else{
                result+=stack.pop();//遇到字母的字元結果加上stack pop出去
            }
        }
        return result;
    }
}

Python

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        res=''#儲存結果
        alphabet=[]#stack儲存是字母的字元
        for i in s:
            if i.isalpha():
                alphabet.append(i)#儲存是字母的字元
        for j in s:
            if j.isalpha():
                res+=alphabet.pop()#遇到字母的字元結果加上stack pop出去
            else:
                res+=j#遇到非字母的字元會其結果維持在將同位置
        return res

上一篇
Day 22 Triangle
下一篇
Day 24 A Number After a Double Reversal
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言